iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
自我挑戰組

Bug仔的筆記本系列 第 22

複選選了什麼?用位元運算 "&" 、 " |" 知道 Check Box 選了什麼!(一)

  • 分享至 

  • xImage
  •  

今天旁邊的同事,在維護專案的過程中,對其中一段程式碼感到困惑。

if(( i & 15 ) == 15 ){
    // 後續動作...
}

跟常用的 && 邏輯運算不同, & 是位元運算,第一次看到這個,沒辦法直覺反應出這是代表什麼意思。

這就牽扯到二進位數值的位元運算。

平常我們數學使用的是十進位,數字 0 ~ 9 共十個數字,超過 9 就進位,前一位多加1,後一位變為0。 9 + 1 就會變成 10

如果是二進位,那就只會有 0、1 共兩個數字。超過 1 就進位, 1 + 1 = 10。

因為二進位只有 0、1 兩個數字。所以可以表示為有無是非對錯開關 等之類的意思。

二進位 - 以菜單為例

要加香菜是 1 , 沒加香菜是 0

https://ithelp.ithome.com.tw/upload/images/20221007/20120420srPwCp5Vwt.png

https://ithelp.ithome.com.tw/upload/images/20221007/20120420uN0xwj8Wvl.png

接下來多一個加滷蛋的選項。只加滷蛋就代表二進位1 0,轉換為十進位就是 2。
https://ithelp.ithome.com.tw/upload/images/20221007/20120420JqEpU7z8nm.png

要加滷蛋、也加香菜就代表二進位的 1 1 ,轉換為十進位就是 3。
https://ithelp.ithome.com.tw/upload/images/20221007/20120420rJ8ewtUTE1.png

每多一項,就代表多一個 2 的次方,從 0 次方開始算。加香菜代表 2 的 0 次方,所以等於 1。加滷蛋代表 2 的 1 次方,所以等於 2。加滷蛋又加香菜,就代表 2 + 1 所以等於 3。

https://ithelp.ithome.com.tw/upload/images/20221007/20120420iOv1WsxiT0.png

光加香菜一個選項,就有不加兩個選擇。所以多了滷蛋這個選項。就會變成 2 x 2 共 4 種排列組合。

  1. 不加滷蛋 、 不加香菜 0 0 => 0
  2. 不加滷蛋 、 要加香菜 0 1 => 1
  3. 要加滷蛋 、 不加香菜 1 0 => 2
  4. 要加滷蛋 、 要加香菜 1 1 => 3

所以每多一個選項就是多乘於 2 ,多一個次方的意思。

三個選項就是 2 x 2 x 2 ,代表 2 的 3 次方。等於 8 。

用 "&" 位元運算,找出有誰加滷蛋

& 位元運算符號,代表要找出兩者的交集,也就是兩者都有的地方。跟"&&"很像,只是差別是做二進位的位元運算。

0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1

只有兩者都是 1 ,才會 & 出結果 1

https://ithelp.ithome.com.tw/upload/images/20221007/20120420TDeZYnl1n7.png

https://ithelp.ithome.com.tw/upload/images/20221007/20120420RQpuA3kVfy.png

上面是二進位表示的數值,在 JavaScript 中, 3 & 2,也是把數值轉成二進位來得到運結果,你可以使用 toString(2) 來看到數值轉換成 2 進位的結果。
https://ithelp.ithome.com.tw/upload/images/20221007/20120420OgzKjE4IPp.png

用 "|" 位元運算,找出你要備什麼料

講完 & 之後,理解 | 就快了, 跟||的用法很像,兩者只要一個有,就是有。只是變成二進位運算

0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1

https://ithelp.ithome.com.tw/upload/images/20221007/20120420PNinUx55jt.png

https://ithelp.ithome.com.tw/upload/images/20221007/20120420wUpetwCeuG.png

今天時間不多了,下集請看複選選了什麼?用位元運算 "&" 、 " |" 知道 Check Box 選了什麼!(二)


上一篇
為什麼跳轉網址中,參數會遺失?
下一篇
Visual Studio 發布出去的專案檔案不是最新版?
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言